package com.bdqn.ch03.SL;

import org.apache.log4j.Logger;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * IntermediaryInvocationHandler
 * 示例 8 使用JDK 动态代理方式实现房产中介对买家代理效果
 * @aurhor Administrator  whs
 * @since 2024/7/1
 */
public class IntermediaryInvocationHandler implements InvocationHandler {

    private Logger logger = Logger.getLogger(IntermediaryInvocationHandler.class);

    private Object target ;

    public void setTarget(Object target){
        this.target = target;
    }


    /**
     * 为被代理的接口方法定义的代理业务规则
     * @param proxy 是正在执行下面invoke方法的代理对象
     * @param method 正在被调用的接口方法 （调用的是真实主题即接口实现类中的方法也叫被代理的目标方法）
     * @param args  传递给接口方法的参数 （即传递给接口实现类中方法的参数）
     * @return
     * @throws Throwable
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        before();
        /**
         * 在调用invoke方法时，就会执行真实主题即接口实现类中的方法也叫目标方法
         * 反射执行目标对象的实际业务
         */
        Object feedback = method.invoke(target, args);
        after();
        return "看房记录：买家反馈“"+feedback+"”";
    }
    private void before() {
        logger.debug("前期准备。");
        logger.debug("查找房源。");
        logger.debug("和卖家沟通时间。");
    }
    public void after() {
        logger.debug("后期跟踪。");
        logger.debug("和买家沟通意见。");
    }
}
